/**
 * 测试规则: ArrayBindingPattern
 * 来源: 从 BindingPattern 拆分
 */

/**
 * 规则测试：ArrayBindingPattern
 * 
 * 位置：Es2025Parser.ts（数组解构处理）
 * 分类：identifiers
 * 编号：108
 * 
 * 规则语法：
 *   ArrayBindingPattern:
 *     [ BindingElementList? ]
 * 
 * 测试目标：
 * ✅ 覆盖所有数组解构形式
 * ✅ 空解构、单元素、多元素（Option/Many）
 * ✅ 跳过元素、rest参数、默认值
 * ✅ 实际应用场景
 * ✅ 边界和复杂场景
 * 
 * 创建时间：2025-11-01
 * 状态：✅ 已完善（20个测试）
 */

// ✅ 测试1：基本数组解构    ArrayBindingPattern -> [ BindingElementList ]
const [a, b] = [1, 2]

// ✅ 测试2：空数组解构    ArrayBindingPattern -> [ ]
const [] = []

// ✅ 测试3：单元素解构    ArrayBindingPattern -> [ BindingElementList ]
const [first] = [42]

// ✅ 测试4：多元素解构    ArrayBindingPattern -> [ BindingElementList ]
const [x, y, z] = [1, 2, 3]

// ✅ 测试5：跳过元素    ArrayBindingPattern -> [ Elision + BindingElementList ]
const [first, , third] = [1, 2, 3]

// ✅ 测试6：跳过多个元素    ArrayBindingPattern -> [ Elision(多个) ]
const [head, , , tail] = [1, 2, 3, 4]

// ✅ 测试7：rest参数    ArrayBindingPattern -> [ BindingRestElement ]
const [first, ...rest] = [1, 2, 3, 4, 5]

// ✅ 测试8：默认值    ArrayBindingPattern -> [ BindingElement with Initializer ]
const [x = 10] = []

// ✅ 测试9：混合默认值和rest    ArrayBindingPattern -> [ 默认值 + rest ]
const [a = 1, ...rest] = []

// ✅ 测试10：嵌套数组解构    ArrayBindingPattern -> [ 嵌套的BindingPattern ]
const [[inner]] = [[42]]

// ✅ 测试11：深层嵌套数组解构    ArrayBindingPattern -> [ 深层嵌套 ]
const [[[deep]]] = [[[1]]]

// ✅ 测试12：混合嵌套    ArrayBindingPattern -> [ 多个嵌套 ]
const [[a, b], [c, d]] = [[1, 2], [3, 4]]

// ✅ 测试13：嵌套和默认值    ArrayBindingPattern -> [ 嵌套 + 默认值 ]
const [[x = 0, y = 0] = []] = []

// ✅ 测试14：函数参数数组解构    ArrayBindingPattern -> 函数参数中的解构
function process([a, b]) {
    return a + b
}

// ✅ 测试15：函数参数解构带默认值    ArrayBindingPattern -> 参数中的默认值
function withDefaults([a = 0, b = 0] = []) {
    return a + b
}

// ✅ 测试16：for-of中的解构    ArrayBindingPattern -> for-of循环中使用
for (const [id, value] of [[1, 'a'], [2, 'b']]) {
    console.log(id, value)
}

// ✅ 测试17：交换变量    ArrayBindingPattern -> 赋值语句中的解构
let x = 1, y = 2;
[x, y] = [y, x]

// ✅ 测试18：从函数返回值解构    ArrayBindingPattern -> 赋值右侧是函数调用
function getCoords() {
    return [10, 20]
}
const [x2, y2] = getCoords()

// ✅ 测试19：复杂嵌套混合    ArrayBindingPattern -> 复杂的嵌套和rest混合
const [[a, ...inner], [b, c = 0] = []] = [[1, 2, 3], [4]]

// ✅ 测试20：实际应用场景    ArrayBindingPattern -> 实际应用中的复杂解构
const result = [
    { id: 1, data: [10, 20] },
    { id: 2, data: [30, 40] }
]
const [{ data: [val1, val2] }] = result

/* Es2025Parser.ts: ArrayBindingPattern: [ BindingElementList? ] */
